
generic
   type Individu (<>) is private;
   type Texte (<>) is private;
   --with function "=" (i : Individu; j : Individu) return Boolean is <>;

   with function putIndividu(i : Individu) return String is <>;
   with function putTexte(t : Texte) return String is <>;

package Murs is
   type Mur is private;
   function Creer (i : Individu) return Mur;
   function Afficher(m : Mur; i : Individu; t : Texte; n : Natural) return Mur;
   function Est_defini(m : Mur; n : Natural) return Boolean;
   function Auteur(m : Mur; n : Natural) return Individu;

   function putMur(m : Mur) return String;

private
    type TextePost is record
      Auteur : access Individu;
      Content : access Texte;
   end record;
   type TextesPosts is array (Positive range <>) of TextePost;

   type TexteComment is record
      Numero : Natural;
      Content : TextePost;
      Comments : access TextesPosts;
   end record;
   type TextesComments is array (Positive range <>) of TexteComment;
   type Mur is record
       Owner : access Individu;
       Content : access TextesComments;
   end record;

   function putTextePost(t : TextePost) return String;
   function putTexteComment(t : TexteComment) return String;

end Murs;
